﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ArmaTuCumpleModel.Model;

namespace ArmaTuCumpleModel.Repository
{
    public class RepEventos
    {
        //Inicializamos una referencia a el modelo
        ArmaTuCumpleDataContext db;

        /*************************
         * Constructor
         * ***********************/

        public RepEventos()
        {
            //Asignamos el modelo
            db = new ArmaTuCumpleDataContext();
        }



        /*************************
         * Metodos de consulta
         * ***********************/

        //Obtener todos los eventos
        public IQueryable<Actividad> ObtenerEventos()
        {
            return db.Actividads;
            
        }

        //Obtener todos los eventos de un usuario
        public IQueryable<Actividad> ObtenerEventosUsuario(Guid id_user)
        {
            return from act in db.Actividads
                   where act.id_contratante.Equals(id_user)
                   orderby act.fecha_realizacion
                   select act;
        }

        //Obtener los eventos próximos de un usuario
        public IQueryable<Actividad> ObtenerProximosEventosUsuario(Guid id_user)
        {
            return from act in db.Actividads
                   where act.fecha_realizacion >= DateTime.Now && act.id_contratante.Equals(id_user)
                   orderby act.fecha_realizacion
                   select act;
        }

        //Obtener los eventos que ya han pasado de un usuario
        public IQueryable<Actividad> ObtenerEventosPasadosUsuario(Guid id_user)
        {
            return from act in db.Actividads
                   where act.fecha_realizacion < DateTime.Now && act.id_contratante.Equals(id_user)
                   orderby act.fecha_realizacion
                   select act;
        }

        //Obtiene una actividad por Id
        public Actividad ObtenerActividad(Guid id)
        {
            return db.Actividads.SingleOrDefault(u => u.id_actividad == id);
        }

        /*************************
         * Metodos para agregar y borrar
         * ***********************/

        //Metodo que agerga un evento
        public void AgregarEvento(Actividad act)
        {
            db.Actividads.InsertOnSubmit(act);
        }

        //Metodo que elimina un evento
        public void EliminarEvento(Actividad act)
        {
            db.Actividads.DeleteOnSubmit(act);
        }

        /*************************
         * Metodo de Confirmacion
         * ***********************/

        //Metodo que confirma una actividad
        public void ConfirmarActividad(Guid id)
        {
            Actividad act = this.ObtenerActividad(id);

            foreach (var temp in act.Servicio_Usuarios)
            {
                if (temp.confirmado == 0) return;
            }

            //Confirmamos
            act.confirmado = 1;

            //Guardamos
            this.Guardar();
        }


        /*************************
         * Persistencia
         * ***********************/

        public void Guardar()
        {
            db.SubmitChanges();
        }

    }
}
